Vue.component('calculate-price', {
    template: '#zyApp'
});
var calculatePriceVm = new Vue({
    el: '#zyApp',
    data: {
        quoteProductInfo: {}, //报价产品信息
        category:{},// 分类类型
        //快印
        fast: {
            categoryData: [],
        },
        // 商务印刷
        print: {
            categoryData: [],
        },
        mustChoiceParts: [],//必选部件
        calculateData: {},// 算价数据
        calculateFormRules: {}, // 算价表单规则
        material: {},//材料属性临时存放
        isShowCraft: {},// 是否显示非必选工艺
        addShowCraft: {},// 是否显示添加工艺
        isShowDefined: {}, //是否显示自定义
        definedArr: {}, //自定义数组
    },
    //页面 挂在后 初始化数据
  /*  mounted: function () {
       this.initData();
    },*/
    methods: {
        initData: function () {
            //查询接单员列表(pop_sys_user表)以及所有快印以及商务印刷的数据
            $.get(baseURL + "order/erporder/addData", function (r) {
                if (r.code === 0) {
                    calculatePriceVm.print.categoryData = r.shangWuCategoryData
                    calculatePriceVm.fast.categoryData = r.fastCategoryData;
                } else {
                    alert(r.msg);
                }
            });
        },

        setData: function (data) {
            calculatePriceVm.print.categoryData = data.shangWuCategoryData;
            calculatePriceVm.fast.categoryData = data.fastCategoryData;
        },

        //菜单切换
        handleSelect(key, keyPath) {
            //发起请求获取报价模板
            var self = this;
            $.get(baseURL + "order/erporder/getQuoteGoods/" + key, function (r) {
                // 获取菜单类型
                calculatePriceVm.category = self.$refs.categoryMenu.items[key].$attrs.type;
                //初始化数据
                calculatePriceVm.calculateFormRules = {};
                calculatePriceVm.calculateData = {
                    categoryType: '',         //分类
                    attributesMap: {},       // 工艺属性
                    selfPaperParts: {},      // 自来纸
                    definitionValueMap: {},  // 自定义
                    categoryId: key,
                }
                if (r.code == 0) {
                    calculatePriceVm.quoteProductInfo = r.quoteProductInfo;
                    calculatePriceVm.calculateData.categoryType = r.quoteProductInfo.categoryType;
                    // 解析数据
                    for (var i = 0; i < calculatePriceVm.quoteProductInfo.quotePartsList.length; i++) {
                        var temp = calculatePriceVm.quoteProductInfo.quotePartsList[i];
                        //取出必选部件
                        if (temp.mustChoice == true) {
                            calculatePriceVm.mustChoiceParts.push(temp.constructId);
                        }
                        //赋值初始值
                        //提交表单属性初始化
                        Vue.set(calculatePriceVm.calculateData.attributesMap, temp.constructId, {});
                        //提交表单自定义值初始化
                        Vue.set(calculatePriceVm.calculateData.definitionValueMap, temp.constructId, {});
                        //提交表单自来纸初始化
                        Vue.set( calculatePriceVm.calculateData.selfPaperParts, temp.constructId, false);
                        //临时材料初始化
                        Vue.set(calculatePriceVm.material, temp.constructId, {});
                        //临时 是否展示自定义 初始化
                        Vue.set(calculatePriceVm.isShowDefined, temp.constructId, {});
                        //临时 自定义数组 初始化
                        Vue.set(calculatePriceVm.definedArr, temp.constructId, {});
                        //临时 是否展示自定义按钮初始化
                        Vue.set(calculatePriceVm.addShowCraft, temp.constructId, false);
                        //赋值默认选项
                        //循环 quoteAttributeOptionList
                        for (var quoteAttribute of temp.quoteAttributeList) {
                            for (var quoteOption of quoteAttribute.quoteAttributeOptionList) {
                                // 普通属性默认值
                                if (quoteAttribute.attributeType === 'normal' && quoteOption.defaultOption === true) {
                                    Vue.set(calculatePriceVm.calculateData.attributesMap[quoteAttribute.constructId], quoteAttribute.attributeTypeValue, quoteOption.id);
                                    //break loopOption;
                                }
                                // 必选工艺 赋默认值
                                if (quoteAttribute.attributeType === 'craft' && quoteAttribute.mustChioce === true && quoteOption.defaultOption === true) {
                                    Vue.set(calculatePriceVm.calculateData.attributesMap[quoteAttribute.constructId], quoteAttribute.attributeTypeValue, quoteOption.id);
                                }
                                // 非必选工艺
                                if (quoteAttribute.attributeType === 'craft' && quoteAttribute.mustChioce != true) {
                                    Vue.set(calculatePriceVm.isShowCraft, temp.constructId, true);
                                }

                                // 材料特殊处理  寻找克重
                                if (quoteAttribute.attributeType === 'material' && quoteOption.defaultOption === true) {
                                    // 先赋值材料
                                    Vue.set(calculatePriceVm.material[quoteAttribute.constructId], 'defaultOption', quoteOption.optionKey);
                                    Vue.set(calculatePriceVm.material[quoteAttribute.constructId], 'sonOptionList', quoteOption.sonOptionList);
                                    // 循环当前克重 找出默认克重
                                    loopSonOption:
                                        for (var sonOption of quoteOption.sonOptionList) {
                                            if (sonOption.defaultOption === true) {
                                                Vue.set(calculatePriceVm.calculateData.attributesMap[quoteAttribute.constructId], quoteAttribute.attributeTypeValue, sonOption.id);
                                                break loopSonOption;
                                            }
                                        }
                                }

                            }
                            //生成表单校验规则
                            if (quoteAttribute.mustChioce === true) {
                                var rule = {required: true,  message: '请选择' + quoteAttribute.name, trigger: 'change'};
                                Vue.set(calculatePriceVm.calculateFormRules, 'attributesMap.'+ temp.constructId +'.'+ quoteAttribute.attributeTypeValue, rule);
                            }
                        }
                    }
                } else {
                    alert(r.msg);
                }
            });
        },

        /* 材料切换,克重置为空 */
        materialChange: function (optionKey, constructId, optionList) {
            //重置 克重下拉框option
            var option = optionList.filter(function (option) {
                return option.optionKey === optionKey;
            });
            if (option.length == 1) {
                calculatePriceVm.material[constructId].sonOptionList = option[0].sonOptionList;
            } else if (option.length == 0) {
                calculatePriceVm.material[constructId].sonOptionList = null;
            }
            // 清空克重
            var material = this.calculateData.attributesMap[constructId].material;
            if (material) {
                calculatePriceVm.calculateData.attributesMap[constructId].material = null;
            }
        },

        /*自定义切换*/
        defineChange: function (constructId, quoteAttribute, value) {
            if(value == false){ //取消自定义
                //清除 自定义规则
                for(var i=0; i< calculatePriceVm.definedArr[constructId][quoteAttribute.attributeTypeValue].length; i++){
                    Vue.set(calculatePriceVm.calculateData.definitionValueMap[constructId][quoteAttribute.attributeTypeValue],i,null);
                    Vue.set(calculatePriceVm.calculateFormRules, 'definitionValueMap.'+ constructId +'.'+ quoteAttribute.attributeTypeValue+'.'+i, null);
                }
                Vue.delete( calculatePriceVm.calculateData.definitionValueMap[constructId], quoteAttribute.attributeTypeValue );
                Vue.delete( calculatePriceVm.definedArr[constructId], quoteAttribute.attributeTypeValue );
                return;
            }
            //先查找当前选项id
            var optionId = this.calculateData.attributesMap[constructId][quoteAttribute.attributeTypeValue];
            // 查找当前选项
            var option = $.grep(quoteAttribute.quoteAttributeOptionList, function (temp) {
                return temp.id === optionId;
            });
            if (option.length == 0) {
                this.$message({showClose: true, message: '请先选择选项 !', type: 'warning'});
                return;
            }
            if (option.length > 1) {
                this.$message({showClose: true, message: '选项数据异常，请联系管理员 !', type: 'error'});
                return;
            }
            //判断当前选项是否有 自定义
            var arrTemp = [];
            if (option.canDefinition === true) {
                // 解析自定义选项
                arrTemp = JSON.parse(option.definitionLength);

            } else {
                // 取属性自定义
                if (quoteAttribute.canDefinition === true) {
                    arrTemp = JSON.parse(quoteAttribute.definitionLength);
                }
            }

            if(arrTemp.length >0){
                // 赋值自定义数据
                Vue.set(calculatePriceVm.definedArr[constructId], quoteAttribute.attributeTypeValue, arrTemp);

                // 动态绑定数组值
                Vue.set(calculatePriceVm.calculateData.definitionValueMap[constructId],quoteAttribute.attributeTypeValue,{});
                for (var i =0 ;i < arrTemp.length;i ++){
                    Vue.set(calculatePriceVm.calculateData.definitionValueMap[constructId][quoteAttribute.attributeTypeValue],i,null);
                    // 赋值表单校验
                    var rule = {required: true,type: 'number',  min: arrTemp[i][0], max: arrTemp[i][1], message: arrTemp[i][0]+'-'+arrTemp[i][1]+' ', trigger: 'blur' }
                    Vue.set(calculatePriceVm.calculateFormRules, 'definitionValueMap.'+ constructId +'.'+ quoteAttribute.attributeTypeValue+'.'+i, rule);
                }
            }
        },

        /*提交表单计算价格*/
        submitForm: function (formName) {
            this.$refs[formName].validate((valid) => {
                if (valid) {
                    var  url = '';
                    if (calculatePriceVm.category === 'fast'){
                        url = "order/erporder/fastCaculateQuote";
                    }else if(calculatePriceVm.category === 'print'){
                        url = "order/erporder/caculateQuote";
                    }else {
                        alert("数据异常,请刷新页面!");
                    }

                    $.ajax({
                        type: "POST",
                        url: baseURL + url,
                        contentType: "application/json",
                        data: JSON.stringify(calculatePriceVm.calculateData),
                        success: function(r){
                            if(r.code == 0){
                                if (calculatePriceVm.category === 'fast'){

                                }
                                alert(r.msg);
                                /*vm.factoryQuoteInfoList=r.factoryQuoteInfoList;
                                vm.quotePriceDialogVisible=true;*/
                            }else{
                                alert(r.msg);
                            }
                        }
                    });
                } else {
                    this.$message.error('请按页面提示修改参数!');
                    return false;
                }
            });

        }
    },

});